home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-05-01 | 4.8 KB | 223 lines | [TEXT/MPS ] |
- /************************************************************
-
- Created: Tuesday, November 6, 1991
- AFPCall.cp
- C++ Interface to the AppleTalk Filing Protocol
- M.Vierling
-
-
- Copyright Apple Computer, Inc. 1991-1992
- All rights reserved
-
- ************************************************************/
-
- #include <Errors.h>
- #include "AFPCall.h"
-
- #pragma segment AFPCall
-
- const char kaspRetry = 10;
- const char kaspTimeout = 10;
- const Boolean kAsync = false;
-
- TAFPCall::TAFPCall()
- {
- this->Debug( 0, "AFPCall constructor:");
-
- fafpSCBPtr = NULL;
- fSessRefnum = 0;
- fafpAttnRoutine = NULL;
- fioCompletion = NULL;
- fAspRetry = kaspRetry;
- fAspTimeout = kaspTimeout;
- }
-
- OSErr TAFPCall::IAFPCall()
- {
- this->Debug( 0, "IAFPCall");
-
- fErrResult = noErr;
-
- if (fErrResult = MPPOpen())
- {
- this->Debug(fErrResult, "MPP Error: ");
- return fErrResult;
- }
- if (fErrResult = ATPLoad())
- {
- this->Debug(fErrResult, "ATP Error: ");
- return fErrResult;
- }
- if (fErrResult = OpenXPP( &fXPPRefNum ))
- {
- this->Debug(fErrResult, "XPP Error: ");
- return fErrResult;
- }
-
- if ((fParamPtr = new XPPParamBlock) == nil) {
- return( fErrResult = 1);
- }
-
- fParamPtr->GETPARM.ioRefNum = fXPPRefNum;
-
- if (fErrResult = ASPGetParms(fParamPtr, kAsync)) {
- delete fParamPtr;
- return fErrResult;
- } else {
- fMaxCommandSize = fParamPtr->GETPARM.aspMaxCmdSize;
- fMaxQuantumSize = fParamPtr->GETPARM.aspQuantumSize;
- }
-
- return fErrResult;
- }
-
- TAFPCall::~TAFPCall()
- {
- this->Debug(0, "AFPCall destructor:");
- if (fafpSCBPtr != NULL)
- {
- this->DoLogout();
- }
- delete fParamPtr;
- }
-
- void TAFPCall::Debug( OSErr /*theErr*/, const char * /*message*/ )
- {
- }
-
- OSErr TAFPCall::SetError()
- {
- if (fErrResult)
- {
- this->Debug(fErrResult, "System Error: ");
- return fErrResult;
- }
- fErrResult = (OSErr)fParamPtr->XPP.cmdResult;
- if (fErrResult)
- {
- this->Debug(fErrResult, "AFP Error: ");
- return fErrResult;
- }
- return fErrResult;
- }
-
- void TAFPCall::IParamBlock()
- {
- fParamPtr->XPP.cmdResult = 0;
- fParamPtr->XPP.ioRefNum = fXPPRefNum;
- fParamPtr->XPP.csCode = afpCall;
- fParamPtr->XPP.ioCompletion = fioCompletion;
- fParamPtr->XPP.sessRefnum = fSessRefnum;
- fParamPtr->XPP.aspTimeout = fAspTimeout;
- fParamPtr->XPP.aspRetry = fAspRetry;
- }
-
- OSErr TAFPCall::DoAFPCommand( XPPParmBlkPtr theParamPtr )
- {
- fErrResult = AFPCommand( theParamPtr, kAsync );
- this->SetError();
- return fErrResult;
- }
-
- OSErr TAFPCall::DoCommand( Ptr cbPtr, unsigned short cbSize,
- Ptr rbPtr, unsigned short rbSize )
- {
- if (fSessRefnum == 0)
- {
- this->Debug(0, "### AFPCall Error: afp session does not exist");
- return( fErrResult = aspParamErr);
- }
- this->IParamBlock();
-
- fParamPtr->XPP.cbSize = cbSize;
- fParamPtr->XPP.cbPtr = cbPtr;
- fParamPtr->XPP.rbSize = rbSize;
- fParamPtr->XPP.rbPtr = rbPtr;
-
- this->DoAFPCommand( fParamPtr );
- return fErrResult;
- }
-
- OSErr TAFPCall::DoWrite( Ptr cbPtr, unsigned short cbSize,
- Ptr rbPtr, unsigned short rbSize,
- Ptr wdPtr, unsigned short wdSize )
- {
- if (fSessRefnum == 0)
- {
- this->Debug(0, "### AFPCall Error: afp session does not exist");
- return( fErrResult = aspParamErr);
- }
- this->IParamBlock();
-
- fParamPtr->XPP.cbSize = cbSize;
- fParamPtr->XPP.cbPtr = cbPtr;
- fParamPtr->XPP.rbSize = rbSize;
- fParamPtr->XPP.rbPtr = rbPtr;
- fParamPtr->XPP.wdPtr = wdPtr;
- fParamPtr->XPP.wdSize = wdSize;
-
- this->DoAFPCommand( fParamPtr );
- return fErrResult;
- }
-
- OSErr TAFPCall::DoGetStatus( Ptr rbPtr, unsigned short rbSize, AddrBlock addrBlock )
- {
- this->IParamBlock();
-
- fParamPtr->XPP.csCode = getStatus; // Kludge because AppleTalk.h didn't inlude enough structs
- fParamPtr->OPEN.serverAddr = addrBlock; // AppleTalk.h should define an ASPGetStatus struct
- fParamPtr->XPP.rbSize = rbSize;
- fParamPtr->XPP.rbPtr = rbPtr;
-
- fErrResult = ASPGetStatus( fParamPtr, kAsync );
- this->SetError();
- return fErrResult;
- }
-
- OSErr TAFPCall::DoLogin( Ptr cbPtr, unsigned short cbSize,
- Ptr rbPtr, unsigned short rbSize, AddrBlock addrBlock )
- {
- this->IParamBlock();
-
- fafpSCBPtr = (Ptr)(new char[scbMemSize]); /* alloc block for scb */
-
- fParamPtr->LOGIN.afpAddrBlock = addrBlock;
- fParamPtr->LOGIN.afpSCBPtr = fafpSCBPtr;
- fParamPtr->LOGIN.afpAttnRoutine = 0;
-
- fParamPtr->LOGIN.cbSize = cbSize;
- fParamPtr->LOGIN.cbPtr = cbPtr;
- fParamPtr->LOGIN.rbSize = rbSize;
- fParamPtr->LOGIN.rbPtr = rbPtr;
-
- this->DoAFPCommand( fParamPtr );
- if ( fErrResult == 0 || fErrResult == -5001 )
- fSessRefnum = fParamPtr->LOGIN.sessRefnum;
- else
- {
- delete fafpSCBPtr;
- fafpSCBPtr = NULL;
- fSessRefnum = 0;
- }
- return fErrResult;
- }
-
- OSErr TAFPCall::DoLogout()
- {
- Byte command = afpLogout;
- short reply;
-
- if ( this->DoCommand( (Ptr)&command, 1, (Ptr)&reply, 2 ) == 0 )
- {
- this->Debug(0, "Closing ASP Session");
- delete fafpSCBPtr;
- fafpSCBPtr = NULL;
- fSessRefnum = 0;
- return 0;
- }
- else
- {
- return fErrResult;
- }
- }
-